diff --git a/uefi-tools/atf-build.sh b/uefi-tools/atf-build.sh
new file mode 100755
index 0000000..0c4c09c
--- /dev/null
+++ b/uefi-tools/atf-build.sh
@@ -0,0 +1,222 @@
+#!/bin/bash
+#
+# Builds ARM Trusted Firmware, and generates FIPs with UEFI and optionally
+# Trusted OS for the supported platforms.
+# Not intended to be called directly, invoked from uefi-build.sh.
+#
+# Board configuration is extracted from
+# parse-platforms.py and platforms.config.
+#
+
+TOOLS_DIR="`dirname $0`"
+. "$TOOLS_DIR"/common-functions
+OUTPUT_DIR="$PWD"/uefi-build
+
+ATF_BUILDVER=1
+
+function usage
+{
+	echo "usage:"
+	echo "atf-build.sh -e <EDK2 source directory> -t <UEFI build profile/toolchain> <platform>"
+	echo
+}
+
+function check_atf_buildver
+{
+	MAJOR=`grep "^VERSION_MAJOR" Makefile | sed 's/.*:= *\([0-9]*\).*/\1/'`
+	[ $? -ne 0 ] && return 1
+	MINOR=`grep "^VERSION_MINOR" Makefile | sed 's/.*:= *\([0-9]*\).*/\1/'`
+	[ $? -ne 0 ] && return 1
+
+	if [ "$MAJOR" -eq 1 -a "$MINOR" -ge 2 ]; then
+		ATF_BUILDVER=2
+	fi
+}
+
+function build_platform
+{
+	if [ X"$EDK2_DIR" = X"" ];then
+		echo "EDK2_DIR not set!" >&2
+		return 1
+	fi
+
+	check_atf_buildver || return 1
+
+	BUILD_ATF="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o build_atf`"
+	if [ X"$BUILD_ATF" = X"" ]; then
+		echo "Platform '$1' is not configured to build ARM Trusted Firmware."
+		return 0
+	fi
+
+	ATF_PLATFORM="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o atf_platform`"
+	if [ X"$ATF_PLATFORM" = X"" ]; then
+		ATF_PLATFORM=$1
+	fi
+
+	#
+	# Read platform configuration
+	#
+	PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o longname`"
+	PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o arch`"
+	PLATFORM_IMAGE_DIR="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o uefi_image_dir`"
+	PLATFORM_BUILDFLAGS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o atf_buildflags`"
+
+	if [ $VERBOSE -eq 1 ]; then
+		echo "PLATFORM_NAME=$PLATFORM_NAME"
+		echo "PLATFORM_ARCH=$PLATFORM_ARCH"
+		echo "PLATFORM_IMAGE_DIR=$PLATFORM_IMAGE_DIR"
+		echo "PLATFORM_BUILDFLAGS=$PLATFORM_BUILDFLAGS"
+	fi
+
+	unset BL30 BL31 BL32 BL33
+	BL30="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o scp_bin`"
+	if [ $ATF_BUILDVER -gt 1 ]; then
+		unset SCP_BL2
+		SCP_BL2="$EDK2_DIR/$BL30"
+	fi
+	BL31="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o el3_bin`"
+	BL33="$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o uefi_bin`"
+
+	#
+	# Set up cross compilation variables (if applicable)
+	#
+	set_cross_compile
+	CROSS_COMPILE="$TEMP_CROSS_COMPILE"
+	echo "Building ARM Trusted Firmware for $PLATFORM_NAME - $BUILD_PROFILE"
+	echo "CROSS_COMPILE=\"$TEMP_CROSS_COMPILE\""
+
+	if [ X"$BL30" != X"" ]; then
+		BL30="${EDK2_DIR}"/"${BL30}"
+	fi
+	if [ X"$BL31" != X"" ]; then
+		BL31="${EDK2_DIR}"/"${BL31}"
+	fi
+
+	#
+	# BL32 requires more attention
+	# If TOS_DIR is not set, we assume user does not want a Trusted OS,
+	# even if the source directory and/or binary for it exists
+	#
+	if [ X"$TOS_DIR" != X"" ]; then
+		SPD="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o atf_spd`"
+
+		TOS_BIN="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_bin`"
+		if [ X"$TOS_BIN" != X"" ]; then
+			BL32=$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/$TOS_BIN
+		fi
+
+		if [ X"$SPD" != X"" ] && [ X"$BL32" != X"" ]; then
+			#
+			# Since SPD cannot be exported or undefined,
+			# we parametrise it here
+			#
+			SPD_OPTION="SPD=$SPD"
+		else
+			echo "WARNING:	Proceeding without Trusted OS!"
+			echo "		Please specify both ATF_SPD and TOS_BIN"
+			echo "		if you wish to use a Trusted OS!"
+		fi
+	fi
+
+	#
+	# Debug extraction handling
+	#
+	case "$BUILD_ATF" in
+	debug*)
+		DEBUG=1
+		BUILD_TYPE="debug"
+		;;
+	*)
+		DEBUG=0
+		BUILD_TYPE="release"
+		;;
+	esac
+
+	export BL30 BL31 BL32 BL33
+
+	echo "BL30=$BL30"
+	if [ $ATF_BUILDVER -gt 1 ]; then
+		export SCP_BL2
+		echo "SCP_BL2=$BL30"
+	fi
+	echo "BL31=$BL31"
+	echo "BL32=$BL32"
+	echo "BL33=$BL33"
+	echo "$SPD_OPTION"
+	echo "BUILD_TYPE=$BUILD_TYPE"
+
+	#
+	# If a build was done with BL32, and followed by another without,
+	# the BL32 component remains in fip.bin, so we delete the build dir
+	# contents before calling make
+	#
+	rm -rf build/"$ATF_PLATFORM/$BUILD_TYPE"/*
+
+	#
+	# Build ARM Trusted Firmware and create FIP
+	#
+	if [ $VERBOSE -eq 1 ]; then
+		echo "Calling ARM Trusted Firmware build:"
+		echo "CROSS_COMPILE="$CROSS_COMPILE" make -j$NUM_THREADS PLAT="$ATF_PLATFORM" $SPD_OPTION DEBUG=$DEBUG ${PLATFORM_BUILDFLAGS} all fip"
+	fi
+	CROSS_COMPILE="$CROSS_COMPILE" make -j$NUM_THREADS PLAT="$ATF_PLATFORM" $SPD_OPTION DEBUG=$DEBUG ${PLATFORM_BUILDFLAGS} all fip
+	if [ $? -eq 0 ]; then
+		#
+		# Copy resulting images to UEFI image dir
+		#
+		if [ $VERBOSE -eq 1 ]; then
+			echo "Copying bl1.bin and fip.bin to "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/""
+		fi
+		cp -a build/"$ATF_PLATFORM/$BUILD_TYPE"/{bl1,fip}.bin "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
+	else
+		return 1
+	fi
+}
+
+# Check to see if we are in a trusted firmware directory
+# refuse to continue if we aren't
+if [ ! -d bl32 ]
+then
+	echo "ERROR: we aren't in the arm-trusted-firmware directory."
+	usage
+	exit 1
+fi
+
+build=
+
+if [ $# = 0 ]
+then
+	usage
+	exit 1
+else
+	while [ "$1" != "" ]; do
+		case $1 in
+			"-e" )
+				shift
+				EDK2_DIR="$1"
+				;;
+			"/h" | "/?" | "-?" | "-h" | "--help" )
+				usage
+				exit
+				;;
+			"-t" )
+				shift
+				BUILD_PROFILE="$1"
+				;;
+			* )
+				build="$1"
+				;;
+		esac
+		shift
+	done
+fi
+
+if [ X"$build" = X"" ]; then
+	echo "No platform specified!" >&2
+	echo
+	usage
+	exit 1
+fi
+
+build_platform $build
+exit $?
diff --git a/uefi-tools/common-functions b/uefi-tools/common-functions
new file mode 100644
index 0000000..08f4fbf
--- /dev/null
+++ b/uefi-tools/common-functions
@@ -0,0 +1,86 @@
+#!/bin/bash
+
+RESULT_BUF=`echo -e ------------------------------------------------------------`
+RESULT_PASS_COUNT=0
+RESULT_FAIL_COUNT=0
+
+TOOLS_DIR="`dirname $0`"
+
+function result_log
+{
+	if [ $1 -eq 0 ]; then
+		RESULT_BUF="`printf \"%s\n%55s\tpass\" \"$RESULT_BUF\" \"$2\"`"
+		RESULT_PASS_COUNT=$(($RESULT_PASS_COUNT + 1))
+	else
+		RESULT_BUF="`printf \"%s\n%55s\tfail\" \"$RESULT_BUF\" \"$2\"`"
+		RESULT_FAIL_COUNT=$(($RESULT_FAIL_COUNT + 1))
+	fi
+}
+
+function result_print
+{
+	printf "%s" "$RESULT_BUF"
+	echo -e "\n------------------------------------------------------------"
+	printf "pass\t$RESULT_PASS_COUNT\n"
+	printf "fail\t$RESULT_FAIL_COUNT\n"
+
+	exit $RESULT_FAIL_COUNT
+}
+
+function get_build_arch
+{
+	case `uname -m` in
+	    arm*)
+	        BUILD_ARCH=ARM;;
+	    aarch64*)
+	        BUILD_ARCH=AARCH64;;
+	    *)
+	        BUILD_ARCH=other;;
+	esac
+}
+
+function set_cross_compile
+{
+	get_build_arch
+
+	echo "Target: $PLATFORM_ARCH"
+	echo "Build: $BUILD_ARCH"
+	if [ "$PLATFORM_ARCH" = "$BUILD_ARCH" ]; then
+	    TEMP_CROSS_COMPILE=
+	elif [ "$PLATFORM_ARCH" == "AARCH64" ]; then
+	    if [ X"$CROSS_COMPILE_64" != X"" ]; then
+	        TEMP_CROSS_COMPILE="$CROSS_COMPILE_64"
+	    else
+	        TEMP_CROSS_COMPILE=aarch64-linux-gnu-
+	    fi
+	elif [ "$PLATFORM_ARCH" == "ARM" ]; then
+	    if [ X"$CROSS_COMPILE_32" != X"" ]; then
+	        TEMP_CROSS_COMPILE="$CROSS_COMPILE_32"
+	    else
+	        TEMP_CROSS_COMPILE=arm-linux-gnueabihf-
+	    fi
+	else
+	    echo "Unsupported target architecture '$PLATFORM_ARCH'!" >&2
+	fi
+}
+
+function get_gcc_version
+{
+	gcc_version=$($1 -dumpversion)
+	case $gcc_version in
+		4.6*|4.7*|4.8*|4.9*)
+			echo GCC$(echo ${gcc_version} | awk -F. '{print $1$2}')
+			;;
+		*)
+			echo "Unknown toolchain version '$gcc_version'" >&2
+			echo "Attempting to build using GCC49 profile." >&2
+			echo GCC49
+			;;
+	esac
+}
+
+function get_clang_version
+{
+	clang_version=`$1 --version | head -1 | sed 's/^.*version\s*\([0-9]*\).\([0-9]*\).*/\1\2/g'`
+	echo "CLANG$clang_version"
+}
diff --git a/uefi-tools/opteed-build.sh b/uefi-tools/opteed-build.sh
new file mode 100755
index 0000000..3c759eb
--- /dev/null
+++ b/uefi-tools/opteed-build.sh
@@ -0,0 +1,158 @@
+#!/bin/bash
+#
+# Builds OP-TEE Trusted OS.
+# Not intended to be called directly, invoked from tos-build.sh.
+#
+# Board configuration is extracted from
+# parse-platforms.py and platforms.config.
+#
+
+TOOLS_DIR="`dirname $0`"
+. "$TOOLS_DIR"/common-functions
+
+export CFG_TEE_CORE_LOG_LEVEL=2  # 0=none 1=err 2=info 3=debug 4=flow
+
+function usage
+{
+	echo "usage:"
+	echo "opteed-build.sh -e <EDK2 source directory> -t <UEFI build profile/toolchain> <platform>"
+	echo
+}
+
+function build_platform
+{
+	unset CFG_ARM64_core PLATFORM PLATFORM_FLAVOR DEBUG
+	TOS_PLATFORM="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_platform`"
+	if [ X"$TOS_PLATFORM" = X"" ]; then
+		TOS_PLATFORM="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o atf_platform`"
+		if [ X"$TOS_PLATFORM" = X"" ]; then
+			TOS_PLATFORM=$1
+		fi
+	fi
+	TOS_PLATFORM_FLAVOR="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_platform_flavor`"
+
+	#
+	# Read platform configuration
+	#
+	PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o arch`"
+	PLATFORM_IMAGE_DIR="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o uefi_image_dir`"
+	PLATFORM_BUILDFLAGS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o tos_buildflags`"
+
+	if [ $VERBOSE -eq 1 ]; then
+		echo "PLATFORM_ARCH=$PLATFORM_ARCH"
+		echo "PLATFORM_IMAGE_DIR=$PLATFORM_IMAGE_DIR"
+		echo "PLATFORM_BUILDFLAGS=$PLATFORM_BUILDFLAGS"
+	fi
+
+	#
+	# Set up cross compilation variables (if applicable)
+	#
+	# OP-TEE requires both 64- and 32-bit compilers for a 64-bit build
+	# For details, visit
+	# https://github.com/OP-TEE/optee_os/blob/master/documentation/build_system.md#cross_compile-cross-compiler-selection
+	#
+	set_cross_compile
+	if [ "$PLATFORM_ARCH" = "AARCH64" ]; then
+		export CFG_ARM64_core=y
+		export CROSS_COMPILE_core="$TEMP_CROSS_COMPILE"
+		export CROSS_COMPILE_ta_arm64="$TEMP_CROSS_COMPILE"
+		PLATFORM_ARCH="ARM"
+		set_cross_compile
+		PLATFORM_ARCH="AARCH64"
+		echo "CFG_ARM64_core=$CFG_ARM64_core"
+		echo "CROSS_COMPILE_ta_arm64=$CROSS_COMPILE_ta_arm64"
+	else
+		export CFG_ARM64_core=n
+	fi
+	export CROSS_COMPILE="$TEMP_CROSS_COMPILE"
+	echo "CROSS_COMPILE=$CROSS_COMPILE"
+	echo "CROSS_COMPILE_core=$CROSS_COMPILE_core"
+
+	#
+	# Set up build variables
+	#
+	BUILD_TOS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o build_tos`"
+	case "$BUILD_TOS" in
+	debug*)
+		export DEBUG=1
+		echo "PROFILE=DEBUG"
+		;;
+	*)
+		export DEBUG=0
+		echo "PROFILE=RELEASE"
+		;;
+	esac
+
+	export PLATFORM=$TOS_PLATFORM
+	export PLATFORM_FLAVOR=$TOS_PLATFORM_FLAVOR
+	echo "PLATFORM=$PLATFORM"
+	echo "PLATFORM_FLAVOR=$PLATFORM_FLAVOR"
+	echo "CFG_TEE_CORE_LOG_LEVEL=$CFG_TEE_CORE_LOG_LEVEL"
+
+	#
+	# Build OP-TEE
+	#
+	if [ $VERBOSE -eq 1 ]; then
+		echo "Calling OP-TEE build:"
+	fi
+	make -j$NUM_THREADS ${PLATFORM_BUILDFLAGS}
+	if [ $? -eq 0 ]; then
+		#
+		# Copy resulting images to UEFI image dir
+		#
+		if [ $VERBOSE -eq 1 ]; then
+			echo "Copying tee.bin to "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/""
+		fi
+		cp -a out/arm-plat-"$TOS_PLATFORM"/core/tee.bin "$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/"
+	else
+		return 1
+	fi
+}
+
+# Check to see if we are in a trusted OS directory
+# refuse to continue if we aren't
+if [ ! -f documentation/optee_design.md ]
+then
+	echo "ERROR: we aren't in the optee_os directory."
+	usage
+	exit 1
+fi
+
+build=
+
+if [ $# = 0 ]
+then
+	usage
+	exit 1
+else
+	while [ "$1" != "" ]; do
+		case $1 in
+			"-e" )
+				shift
+				EDK2_DIR="$1"
+				;;
+			"/h" | "/?" | "-?" | "-h" | "--help" )
+				usage
+				exit
+				;;
+			"-t" )
+				shift
+				BUILD_PROFILE="$1"
+				;;
+			* )
+				build="$1"
+				;;
+		esac
+		shift
+	done
+fi
+
+if [ X"$build" = X"" ]; then
+	echo "No platform specified!" >&2
+	echo
+	usage
+	exit 1
+fi
+
+build_platform $build
+exit $?
diff --git a/uefi-tools/parse-platforms.py b/uefi-tools/parse-platforms.py
new file mode 100755
index 0000000..af44038
--- /dev/null
+++ b/uefi-tools/parse-platforms.py
@@ -0,0 +1,81 @@
+#!/usr/bin/python
+
+import sys, os, argparse, ConfigParser
+
+default_filename='platforms.config'
+
+def list_platforms():
+    for p in platforms: print p
+
+def shortlist_platforms():
+    for p in platforms: print p,
+
+def get_images():
+    if args.platform:
+        try:
+            value = config.get(args.platform, "EXTRA_FILES")
+            print value,
+        except:
+            pass
+        try:
+            value = config.get(args.platform, "BUILD_ATF")
+            if value == "yes":
+                print "bl1.bin fip.bin"
+                return True
+        except:
+            try:
+                value = config.get(args.platform, "UEFI_BIN")
+                print value
+                return True
+            except:
+                print "No images found!"
+    else:
+        print "No platform specified!"
+
+    return False
+
+def get_option():
+    if args.platform:
+        if args.option:
+            try:
+                value = config.get(args.platform, args.option)
+                if value:
+                    print value
+                    return True
+            except:
+                return True   # Option not found, return True, and no output
+        else:
+            print "No option specified!"
+    else:
+        print "No platform specified!"
+    return False
+
+parser = argparse.ArgumentParser(description='Parses platform configuration for Linaro UEFI build scripts.')
+parser.add_argument('-c', '--config-file', help='Specify a non-default platform config file.', required=False)
+parser.add_argument('-p', '--platform', help='Read configuration for PLATFORM only.', required=False)
+parser.add_argument('command', action="store", help='Action to perform')
+parser.add_argument('-o', '--option', help='Option to retreive')
+
+args = parser.parse_args()
+if args.config_file:
+    config_filename = args.config_file
+else:
+    config_filename = os.path.dirname(os.path.realpath(sys.argv[0])) + '/' + default_filename
+
+config = ConfigParser.ConfigParser()
+config.read(config_filename)
+
+platforms = config.sections()
+
+commands = {"shortlist": shortlist_platforms,
+            "list": list_platforms,
+            "images": get_images,
+            "get": get_option}
+
+try:
+    retval = commands[args.command]()
+except:
+    print ("Unrecognized command '%s'" % args.command)
+
+if retval != True:
+    sys.exit(1)
diff --git a/uefi-tools/platforms.config b/uefi-tools/platforms.config
new file mode 100644
index 0000000..adaf6c0
--- /dev/null
+++ b/uefi-tools/platforms.config
@@ -0,0 +1,245 @@
+# Platform build configurations for Linaro EDK2 builds
+# ====================================================
+# The configuration file format is extremely simplistic:
+# - Each platform has a short name.
+# - A platform entry starts by the short name held in square brackets, '[]'
+# - Within each entry, all options are described in a NAME=VALUE scheme,
+#   with the name being whatever comes before the first '=' on the line,
+#   and the value being everything that comes after it.
+#
+# Mandatory options:
+# - LONGNAME		A more descriptive name of the platform.
+# - DSC			Pointer to the EDK2 build description file. (The
+#			pandaboard is excused, all other ports must have this.)
+# - ARCH		String describing the architecture to build for.
+#			Currently supported are AARCH32 and AARCH64.
+# - UEFI_BIN		Name of executable image produced.
+# - UEFI_IMAGE_DIR	Build output directory name, relative to 'Build'.
+#
+# Options for Trusted OS
+# Note that OP-TEE (https://github.com/OP-TEE/optee_os) is the only currently
+# supported Trusted OS
+# - BUILD_TOS		Set to "yes" if the build should automatically build
+#   			Trusted OS, mainly for ARM Trusted Firmware.
+#			If this is set, you must also set ATF_SPD!
+#			Else we will not know which specific Trusted OS to
+#			build.
+#			Set to "debug" to create a debug build.
+# - TOS_PLATFORM	Platform name for Trusted OS build, if
+#   			different from ARM Trusted Firmware platform
+#			or UEFI platform name.
+# - TOS_PLATFORM_FLAVOR	If a core platform has multiple flavors, specify which
+#			flavor here.
+#
+# Options for ARM Trusted Firmware platforms
+# - BUILD_ATF		Set to "yes" if the build should automatically build
+#   			ARM Trusted Firmware and a fip containing UEFI image.
+#			Set to "debug" to create a debug build.
+# - ATF_PLATFORM	Platform name for ARM Trusted Firmware build, if
+#   			different from UEFI platform name.
+# - SCP_BIN		SCP image to pass to ARM Trusted Firmware.
+# - TOS_BIN		Trusted OS image to pass to ARM Trusted Firmware.
+#			The path is relative to
+#			$EDK2_DIR/Build/$PLATFORM_IMAGE_DIR/$BUILD_PROFILE/FV/.
+#			To actually build the Trusted OS, you must also set
+#			ATF_SPD.
+# - ATF_SPD		Name of Secure Payload Dispatcher
+#			To actually build the Trusted OS, you must also set
+#			TOS_BIN.
+#
+# Optional options:
+# - BUILDFLAGS		Any special flags you want to pass to the build command.
+# - ATF_BUILDFLAGS	Any special flags you want to pass to the ARM Trusted
+#			Firmware build command.
+# - TOS_BUILDFLAGS	Any special flags you want to pass to the Trusted OS
+#			build command.
+# - EXTRA_FILES		Any additional files to be copied to output dir.
+# - PREBUILD_CMDS	Any commands you want to execute before the build step.
+# - POSTBUILD_CMDS	Any commands you want to execute after the build step.
+# - PACKAGES_PATH	Additional directories to search for packages under.
+#
+# Special options:
+# - BUILDCMD		Command to call instead of the normal build command.
+#			Only for pandaboard, not to be used for new ports.
+#
+
+[juno]
+LONGNAME=aarch64 Juno
+DSC=OpenPlatformPkg/Platforms/ARM/Juno/ArmJuno.dsc
+BUILDFLAGS=
+ARCH=AARCH64
+BUILD_ATF=yes
+UEFI_BIN=BL33_AP_UEFI.fd
+UEFI_IMAGE_DIR=ArmJuno
+SCP_BIN=OpenPlatformPkg/Platforms/ARM/Juno/Binary/bl30.bin
+EXTRA_FILES=../../../../OpenPlatformPkg/Platforms/ARM/Juno/Binary/bl0.bin ../../../../OpenPlatformPkg/Platforms/ARM/Juno/Binary/Copying.txt
+
+# ARM FVP BASE AEMv8-A model
+[fvp_full]
+LONGNAME=aarch64 FVP RTSM with full perhiperhal set
+DSC=OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
+BUILDFLAGS=-D EDK2_OUT_DIR=Build/ArmVExpress-FVP-AArch64-Full -D EDK2_ENABLE_SMSC_91X=1 -D EDK2_ENABLE_PL111=1
+ARCH=AARCH64
+UEFI_BIN=FVP_AARCH64_EFI.fd
+UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64-Full
+
+[fvp]
+LONGNAME=aarch64 FVP RTSM
+DSC=OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress-FVP-AArch64.dsc
+BUILDFLAGS=-D EDK2_ENABLE_SMSC_91X=1
+ARCH=AARCH64
+BUILD_ATF=yes
+UEFI_BIN=FVP_AARCH64_EFI.fd
+UEFI_IMAGE_DIR=ArmVExpress-FVP-AArch64
+
+[tc2]
+LONGNAME=Versatile Express TC2
+BUILDFLAGS=-D ARM_BIGLITTLE_TC2=1
+DSC=OpenPlatformPkg/Platforms/ARM/VExpress/ArmVExpress-CTA15-A7.dsc
+ARCH=ARM
+UEFI_BIN=ARM_VEXPRESS_CTA15A7_EFI.fd
+UEFI_IMAGE_DIR=ArmVExpress-CTA15-A7
+
+[panda]
+LONGNAME=TI Pandaboard
+BUILDCMD=./PandaBoardPkg/build.sh
+BUILDFLAGS=
+ARCH=ARM
+UEFI_BIN=MLO
+UEFI_IMAGE_DIR=PandaBoard
+
+[beagle]
+LONGNAME=BeagleBoard
+BUILDFLAGS=
+DSC=BeagleBoardPkg/BeagleBoardPkg.dsc
+ARCH=ARM
+
+[d01]
+LONGNAME=HiSilicon D01 Cortex-A15 16-cores
+BUILDFLAGS=-D EDK2_ARMVE_STANDALONE=1
+DSC=HisiPkg/D01BoardPkg/D01BoardPkg.dsc
+ARCH=ARM
+UEFI_BIN=D01.fd
+UEFI_IMAGE_DIR=D01
+
+[d01-intelbds]
+LONGNAME=HiSilicon D01 Cortex-A15 16-cores Intel Bds
+BUILDFLAGS=-D EDK2_ARMVE_STANDALONE=1 -D INTEL_BDS -D NO_LINUX_LOADER -D EDK2_OUT_DIR=Build/D01-IntelBds
+DSC=HisiPkg/D01BoardPkg/D01BoardPkg.dsc
+ARCH=ARM
+UEFI_BIN=D01.fd
+UEFI_IMAGE_DIR=D01
+
+[bbb]
+LONGNAME=Texas Instruments BeagleBone Black
+BUILDFLAGS=
+DSC=TexasInstrumentsPkg/BeagleBoneBlackPkg/BeagleBoneBlackPkg.dsc
+ARCH=ARM
+UEFI_BIN=BEAGLEBONEBLACK_EFI.fd
+UEFI_IMAGE_DIR=BeagleBoneBlack
+
+[qemu]
+LONGNAME=QEMU ARM Emulator
+BUILDFLAGS=-D INTEL_BDS
+DSC=ArmVirtPkg/ArmVirtQemu.dsc
+ARCH=ARM
+UEFI_BIN=QEMU_EFI.fd
+UEFI_IMAGE_DIR=ArmVirtQemu-ARM
+
+[qemu64]
+LONGNAME=QEMU AArch64 Emulator
+BUILDFLAGS=-D INTEL_BDS
+DSC=ArmVirtPkg/ArmVirtQemu.dsc
+ARCH=AARCH64
+UEFI_BIN=QEMU_EFI.fd
+UEFI_IMAGE_DIR=ArmVirtQemu-AARCH64
+
+[mustang]
+LONGNAME=APM XGene Mustang
+BUILDFLAGS=
+DSC=ArmPlatformPkg/APMXGenePkg/APMXGene-Mustang.dsc
+ARCH=AARCH64
+UEFI_BIN=APMXGENE-MUSTANG.fd SEC_APMXGENE-MUSTANG.fd
+UEFI_IMAGE_DIR=APMXGene-Mustang
+
+[overdrive]
+LONGNAME=AMD Overdrive
+BUILDFLAGS=-D INTEL_BDS
+DSC=OpenPlatformPkg/Platforms/AMD/Styx/OverdriveBoard/OverdriveBoard.dsc
+ARCH=AARCH64
+PACKAGES_PATH=OpenPlatformPkg/Platforms/AMD/Styx/Binary
+UEFI_BIN=STYX_ROM.fd
+UEFI_IMAGE_DIR=Overdrive
+
+[cello]
+LONGNAME=LeMaker Cello
+BUILDFLAGS=-D INTEL_BDS
+DSC=OpenPlatformPkg/Platforms/AMD/Styx/CelloBoard/CelloBoard.dsc
+ARCH=AARCH64
+PACKAGES_PATH=OpenPlatformPkg/Platforms/AMD/Styx/Binary
+UEFI_BIN=STYX_ROM.fd
+UEFI_IMAGE_DIR=Cello
+
+[hikey]
+LONGNAME=CircuitCo HiKey
+DSC=OpenPlatformPkg/Platforms/Hisilicon/HiKey/HiKey.dsc
+ARCH=AARCH64
+UEFI_BIN=BL33_AP_UEFI.fd
+UEFI_IMAGE_DIR=HiKey
+BUILD_ATF=yes
+ATF_SPD=opteed
+TOS_BIN=tee.bin
+BUILD_TOS=yes
+SCP_BIN=OpenPlatformPkg/Platforms/Hisilicon/HiKey/Binary/mcuimage.bin
+# Uncomment this to use UART0 as the EDK2 console
+#BUILDFLAGS=-DSERIAL_BASE=0xF8015000
+# Uncomment this to use UART0 as the ARM Trusted Firmware console
+#ATF_BUILDFLAGS=CONSOLE_BASE=PL011_UART0_BASE CRASH_CONSOLE_BASE=PL011_UART0_BASE
+# Uncomment this to use UART0 as the OP-TEE Trusted OS console
+#TOS_BUILDFLAGS=CFG_CONSOLE_UART=0
+
+[xen64]
+LONGNAME=AArch64 Xen guest
+BUILDFLAGS=
+DSC=ArmPlatformPkg/ArmVirtualizationPkg/ArmVirtualizationXen.dsc
+ARCH=AARCH64
+UEFI_BIN=XEN_EFI.fd
+UEFI_IMAGE_DIR=ArmVirtualizationXen-AARCH64
+
+[aarch64-shell]
+LONGNAME=AArch64 EFI Shell
+BUILDFLAGS=-D INCLUDE_TFTP_COMMAND
+DSC=ShellPkg/ShellPkg.dsc
+ARCH=AARCH64
+
+[aarch64-shell-minimal]
+LONGNAME=AArch64 EFI Shell (Minimal)
+BUILDFLAGS=-D NO_SHELL_PROFILES
+DSC=ShellPkg/ShellPkg.dsc
+ARCH=AARCH64
+
+[arm-shell]
+LONGNAME=ARM EFI Shell
+BUILDFLAGS=-D INCLUDE_TFTP_COMMAND
+DSC=ShellPkg/ShellPkg.dsc
+ARCH=ARM
+
+[arm-shell-minimal]
+LONGNAME=ARM EFI Shell (Minimal)
+BUILDFLAGS=-D NO_SHELL_PROFILES
+DSC=ShellPkg/ShellPkg.dsc
+ARCH=ARM
+
+[d02]
+LONGNAME=Hisilicon D02
+DSC=OpenPlatformPkg/Platforms/Hisilicon/D02/Pv660D02.dsc
+ARCH=AARCH64
+UEFI_BIN=PV660D02.fd
+UEFI_IMAGE_DIR=Pv660D02
+
+[d03]
+LONGNAME=Hisilicon D03
+DSC=OpenPlatformPkg/Platforms/Hisilicon/D03/D03.dsc
+ARCH=AARCH64
+UEFI_BIN=D03.fd
+UEFI_IMAGE_DIR=D03
diff --git a/uefi-tools/tos-build.sh b/uefi-tools/tos-build.sh
new file mode 100755
index 0000000..9dc4b2d
--- /dev/null
+++ b/uefi-tools/tos-build.sh
@@ -0,0 +1,88 @@
+#!/bin/bash
+#
+# Builds Trusted OS, mainly for ARM Trusted Firmware.
+# Calls $ATF_SPD-build.sh for the actual build of a specific Trusted OS.
+# Not intended to be called directly, invoked from uefi-build.sh.
+#
+# Board configuration is extracted from
+# parse-platforms.py and platforms.config.
+#
+
+TOOLS_DIR="`dirname $0`"
+. "$TOOLS_DIR"/common-functions
+
+function usage
+{
+	echo "usage:"
+	echo "tos-build.sh -e <EDK2 source directory> -t <UEFI build profile/toolchain> <platform>"
+	echo
+}
+
+function build_platform
+{
+	if [ X"$EDK2_DIR" = X"" ];then
+		echo "EDK2_DIR not set!" >&2
+		return 1
+	fi
+
+	if [ X"`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o build_tos`" = X"" ]; then
+		echo "Platform '$1' is not configured to build Trusted OS."
+		return 0
+	fi
+
+	#
+	# Build Trusted OS
+	#
+	ATF_SPD="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $1 get -o atf_spd`"
+	if [ -f $TOOLS_DIR/$ATF_SPD-build.sh ]; then
+		echo "Building $ATF_SPD Trusted OS"
+		if [ $VERBOSE -eq 1 ]; then
+			echo "$TOOLS_DIR/$ATF_SPD-build.sh -e "$EDK2_DIR" -t "$BUILD_PROFILE" $build"
+		fi
+		$TOOLS_DIR/$ATF_SPD-build.sh -e "$EDK2_DIR" -t "$BUILD_PROFILE" $build
+		return $?
+	else
+		echo "ERROR: missing Trusted OS build script."
+		echo "       Or build script not named $ATF_SPD-build.sh"
+		return 1
+	fi
+}
+
+build=
+
+if [ $# = 0 ]
+then
+	usage
+	exit 1
+else
+	while [ "$1" != "" ]; do
+		case $1 in
+			"-e" )
+				shift
+				EDK2_DIR="$1"
+				;;
+			"/h" | "/?" | "-?" | "-h" | "--help" )
+				usage
+				exit
+				;;
+			"-t" )
+				shift
+				BUILD_PROFILE="$1"
+				;;
+			* )
+				build="$1"
+				;;
+		esac
+		shift
+	done
+fi
+
+if [ X"$build" = X"" ]; then
+	echo "No platform specified!" >&2
+	echo
+	usage
+	exit 1
+fi
+
+build_platform $build
+exit $?
diff --git a/uefi-tools/uefi-build.sh b/uefi-tools/uefi-build.sh
new file mode 100755
index 0000000..0fa50ed
--- /dev/null
+++ b/uefi-tools/uefi-build.sh
@@ -0,0 +1,331 @@
+#!/bin/bash
+
+#
+# Board Configuration Section
+# ===========================
+#
+# Board configuration moved to parse-platforms.py and platforms.config.
+#
+# No need to edit below unless you are changing script functionality.
+#
+
+unset WORKSPACE EDK_TOOLS_DIR MAKEFLAGS
+
+TOOLS_DIR="`dirname $0`"
+. "$TOOLS_DIR"/common-functions
+PLATFORM_CONFIG=""
+VERBOSE=0
+ATF_DIR=
+TOS_DIR=
+TOOLCHAIN=
+OPENSSL_CONFIGURED=FALSE
+
+# Number of threads to use for build
+export NUM_THREADS=$((`getconf _NPROCESSORS_ONLN` + 1))
+
+function build_platform
+{
+	PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname`"
+	PLATFORM_PREBUILD_CMDS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o prebuild_cmds`"
+	PLATFORM_BUILDFLAGS="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildflags`"
+	PLATFORM_BUILDFLAGS="$PLATFORM_BUILDFLAGS ${EXTRA_OPTIONS[@]}"
+	PLATFORM_BUILDCMD="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o buildcmd`"
+	PLATFORM_DSC="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o dsc`"
+	PLATFORM_ARCH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o arch`"
+	PLATFORM_PACKAGES_PATH="$PWD"
+
+	TEMP_PACKAGES_PATH="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o packages_path`"
+	if [ -n "$TEMP_PACKAGES_PATH" ]; then
+		IFS=:
+		for path in "$TEMP_PACKAGES_PATH"; do
+			case "$path" in
+				/*)
+					PLATFORM_PACKAGES_PATH="$PLATFORM_PACKAGES_PATH:$path"
+				;;
+				*)
+					PLATFORM_PACKAGES_PATH="$PLATFORM_PACKAGES_PATH:$PWD/$path"
+				;;
+		        esac
+		done
+		unset IFS
+	fi
+	if [ $VERBOSE -eq 1 ]; then
+		echo "Setting build parallellism to $NUM_THREADS processes\n"
+		echo "PLATFORM_NAME=$PLATFORM_NAME"
+		echo "PLATFORM_PREBUILD_CMDS=$PLATFORM_PREBUILD_CMDS"
+		echo "PLATFORM_BUILDFLAGS=$PLATFORM_BUILDFLAGS"
+		echo "PLATFORM_BUILDCMD=$PLATFORM_BUILDCMD"
+		echo "PLATFORM_DSC=$PLATFORM_DSC"
+		echo "PLATFORM_ARCH=$PLATFORM_ARCH"
+		echo "PLATFORM_PACKAGES_PATH=$PLATFORM_PACKAGES_PATH"
+	fi
+
+	set_cross_compile
+	CROSS_COMPILE="$TEMP_CROSS_COMPILE"
+
+	echo "Building $PLATFORM_NAME - $PLATFORM_ARCH"
+	echo "CROSS_COMPILE=\"$TEMP_CROSS_COMPILE\""
+	echo "$board"_BUILDFLAGS="'$PLATFORM_BUILDFLAGS'"
+
+	if [ "$TARGETS" == "" ]; then
+		TARGETS=( RELEASE )
+	fi
+
+	case $TOOLCHAIN in
+		"gcc")
+			export TOOLCHAIN=`get_gcc_version "$CROSS_COMPILE"gcc`
+			;;
+		"clang")
+			export TOOLCHAIN=`get_clang_version clang`
+			;;
+	esac
+	echo "TOOLCHAIN is ${TOOLCHAIN}"
+
+	export ${TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE
+	echo "Toolchain prefix: ${TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE"
+
+	export PACKAGES_PATH="$PLATFORM_PACKAGES_PATH"
+	for target in "${TARGETS[@]}" ; do
+		if [ X"$PLATFORM_PREBUILD_CMDS" != X"" ]; then
+			echo "Run pre build commands"
+			eval ${PLATFORM_PREBUILD_CMDS}
+		fi
+		if [ X"$PLATFORM_BUILDCMD" == X"" ]; then
+			echo  ${TOOLCHAIN}_${PLATFORM_ARCH}_PREFIX=$CROSS_COMPILE build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" -b "$target" \
+				${PLATFORM_BUILDFLAGS}
+			build -n $NUM_THREADS -a "$PLATFORM_ARCH" -t ${TOOLCHAIN} -p "$PLATFORM_DSC" -b "$target" \
+				${PLATFORM_BUILDFLAGS}
+		else
+			${PLATFORM_BUILDCMD} -b "$target" ${PLATFORM_BUILDFLAGS}
+		fi
+		RESULT=$?
+		if [ $RESULT -eq 0 ]; then
+			if [ X"$TOS_DIR" != X"" ]; then
+				pushd $TOS_DIR >/dev/null
+				if [ $VERBOSE -eq 1 ]; then
+					echo "$TOOLS_DIR/tos-build.sh -e "$EDK2_DIR" -t "$target"_${TOOLCHAIN} $board"
+				fi
+				$TOOLS_DIR/tos-build.sh -e "$EDK2_DIR" -t "$target"_${TOOLCHAIN} $board
+				RESULT=$?
+				popd >/dev/null
+			fi
+		fi
+		if [ $RESULT -eq 0 ]; then
+			if [ X"$ATF_DIR" != X"" ]; then
+				pushd $ATF_DIR >/dev/null
+				if [ $VERBOSE -eq 1 ]; then
+					echo "$TOOLS_DIR/atf-build.sh -e "$EDK2_DIR" -t "$target"_${TOOLCHAIN} $board"
+				fi
+				$TOOLS_DIR/atf-build.sh -e "$EDK2_DIR" -t "$target"_${TOOLCHAIN} $board
+				RESULT=$?
+				popd >/dev/null
+			fi
+		fi
+		result_log $RESULT "$PLATFORM_NAME $target"
+	done
+	unset PACKAGES_PATH
+}
+
+
+function uefishell
+{
+	BUILD_ARCH=`uname -m`
+	case $BUILD_ARCH in
+		arm*)
+			ARCH=ARM
+			;;
+		aarch64)
+			ARCH=AARCH64
+			;;
+		*)
+			unset ARCH
+			;;
+	esac
+	export ARCH
+	if [ $VERBOSE -eq 1 ]; then
+		echo "Building BaseTools"
+	fi
+	export EDK_TOOLS_PATH=`pwd`/BaseTools
+	. edksetup.sh BaseTools
+	make -C $EDK_TOOLS_PATH
+	if [ $? -ne 0 ]; then
+		echo " !!! UEFI BaseTools failed to build !!! " >&2
+		exit 1
+	fi
+}
+
+
+function usage
+{
+	echo "usage:"
+	echo -n "uefi-build.sh [-b DEBUG | RELEASE] [ all "
+	for board in "${boards[@]}" ; do
+	    echo -n "| $board "
+	done
+	echo "]"
+	printf "%8s\tbuild %s\n" "all" "all supported platforms"
+	for board in "${boards[@]}" ; do
+		PLATFORM_NAME="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG -p $board get -o longname`"
+		printf "%8s\tbuild %s\n" "$board" "${PLATFORM_NAME}"
+	done
+}
+
+#
+# Since we do a command line validation on whether specified platforms exist or
+# not, do a first pass of command line to see if there is an explicit config
+# file there to read valid platforms from.
+#
+commandline=( "$@" )
+i=0
+for arg;
+do
+	if [ $arg == "-c" ]; then
+		FILE_ARG=${commandline[i + 1]}
+		if [ ! -f "$FILE_ARG" ]; then
+			echo "ERROR: configuration file '$FILE_ARG' not found" >&2
+			exit 1
+		fi
+		case "$FILE_ARG" in
+			/*)
+				PLATFORM_CONFIG="-c \"$FILE_ARG\""
+			;;
+			*)
+				PLATFORM_CONFIG="-c `readlink -f \"$FILE_ARG\"`"
+			;;
+		esac
+		echo "Platform config file: '$FILE_ARG'"
+		export PLATFORM_CONFIG
+	fi
+	i=$(($i + 1))
+done
+
+builds=()
+boards=()
+boardlist="`$TOOLS_DIR/parse-platforms.py $PLATFORM_CONFIG shortlist`"
+for board in $boardlist; do
+    boards=(${boards[@]} $board)
+done
+
+NUM_TARGETS=0
+
+while [ "$1" != "" ]; do
+	case $1 in
+		all )
+			builds=(${boards[@]})
+			NUM_TARGETS=$(($NUM_TARGETS + 1))
+			;;
+		"/h" | "/?" | "-?" | "-h" | "--help" )
+			usage
+			exit
+			;;
+		"-v" )
+			VERBOSE=1
+			;;
+		"-a" )
+			shift
+			ATF_DIR="$1"
+			;;
+		"-c" )
+			# Already parsed above - skip this + option
+			shift
+			;;
+		"-s" )
+			shift
+			export TOS_DIR="$1"
+			;;
+		"-b" | "--build" )
+			shift
+			echo "Adding Build profile: $1"
+			TARGETS=( ${TARGETS[@]} $1 )
+			;;
+		"-D" )
+			shift
+			echo "Adding option: -D $1"
+			EXTRA_OPTIONS=( ${EXTRA_OPTIONS[@]} "-D" $1 )
+			;;
+		"-T" )
+			shift
+			echo "Setting toolchain to '$1'"
+			TOOLCHAIN="$1"
+			;;
+		"-1" )
+			NUM_THREADS=1
+			;;
+		* )
+			MATCH=0
+			for board in "${boards[@]}" ; do
+				if [ "$1" == $board ]; then
+					MATCH=1
+					builds=(${builds[@]} "$board")
+					break
+				fi
+			done
+
+			if [ $MATCH -eq 0 ]; then
+				echo "unknown arg $1"
+				usage
+				exit 1
+			fi
+			NUM_TARGETS=$(($NUM_TARGETS + 1))
+			;;
+	esac
+	shift
+done
+
+# If there were no args, use a menu to select a single board / all boards to build
+if [ $NUM_TARGETS -eq 0 ]
+then
+	read -p "$(
+			f=0
+			for board in "${boards[@]}" ; do
+					echo "$((++f)): $board"
+			done
+			echo $((++f)): all
+
+			echo -ne '> '
+	)" selection
+
+	if [ "$selection" -eq $((${#boards[@]} + 1)) ]; then
+		builds=(${boards[@]})
+	else
+		builds="${boards[$((selection-1))]}"
+	fi
+fi
+
+# Check to see if we are in a UEFI repository
+# refuse to continue if we aren't
+if [ ! -e BaseTools ]
+then
+	echo "ERROR: we aren't in the UEFI directory."
+	echo "       I can tell because I can't see the BaseTools directory"
+	exit 1
+fi
+
+EDK2_DIR="$PWD"
+export VERBOSE
+
+if [[ "${EXTRA_OPTIONS[@]}" != *"FIRMWARE_VER"* ]]; then
+	if test -d .git && head=`git rev-parse --verify --short HEAD 2>/dev/null`; then
+		FIRMWARE_VER=`git rev-parse --short HEAD`
+		if ! git diff-index --quiet HEAD --; then
+			FIRMWARE_VER="${FIRMWARE_VER}-dirty"
+		fi
+		EXTRA_OPTIONS=( ${EXTRA_OPTIONS[@]} "-D" FIRMWARE_VER=$FIRMWARE_VER )
+		if [ $VERBOSE -eq 1 ]; then
+			echo "FIRMWARE_VER=$FIRMWARE_VER"
+			echo "EXTRA_OPTIONS=$EXTRA_OPTIONS"
+		fi
+	fi
+fi
+
+uefishell
+
+if [ X"$TOOLCHAIN" = X"" ]; then
+	TOOLCHAIN=gcc
+fi
+
+for board in "${builds[@]}" ; do
+	build_platform
+done
+
+result_print
diff --git a/uefi-tools/uefi-build.sh.bash_completion b/uefi-tools/uefi-build.sh.bash_completion
new file mode 100644
index 0000000..f0a5305
--- /dev/null
+++ b/uefi-tools/uefi-build.sh.bash_completion
@@ -0,0 +1,24 @@
+# bash completion for uefi-build.sh
+# copy this file to /etc/bash_completion.d/uefi-build.s
+
+have uefi-build.sh &&
+_uefi-build.sh()
+{
+    local cur prev
+
+    COMPREPLY=()
+    _get_comp_words_by_ref -n = cur
+
+    _expand || return 0
+
+    COMPREPLY=( $( compgen -W '--help -b --build RELEASE DEBUG a5 a9 tc1 tc2 panda origen arndale rtsm_a9x4 rtsm_a15x1 rtsm_a15mpcore rtsm_aarch64 beagle all' -- "$cur" ) )
+} &&
+complete -F _uefi-build.sh uefi-build.sh
+
+# Local variables:
+# mode: shell-script
+# sh-basic-offset: 4
+# sh-indent-comment: t
+# indent-tabs-mode: nil
+# End:
+# ex: ts=4 sw=4 et filetype=sh
